传递指针示例 您所在的位置:网站首页 matlab 构造函数 传递指针示例

传递指针示例

2023-05-10 21:52| 来源: 网络整理| 查看: 265

传递指针示例multDoubleRef 函数

shrlibsample 库中的 multDoubleRef 函数将输入乘以 5。

EXPORTED_FUNCTION double *multDoubleRef(double *x) { *x *= 5; return x; }

输入是指向 double 的指针,而该函数也返回指向 double 的指针。MATLAB® 函数签名是:

返回类型名称参数[lib.pointer, doublePtr]multDoubleRef(doublePtr)传递双精度类型的指针打开实时脚本

此示例说明如何构造指针并传递给 C 函数 multDoubleRef。

加载包含该函数的库。

if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end

构造指向输入参数 X 的指针 Xptr。

X = 13.3; Xptr = libpointer('doublePtr',X);

验证 Xptr 的内容。

get(Xptr) Value: 13.3000 DataType: 'doublePtr'

调用该函数并检查结果。

calllib('shrlibsample','multDoubleRef',Xptr); Xptr.Valueans = 66.5000

Xptr 是一个句柄对象。此句柄的副本引用同一个底层对象,对句柄对象执行的任何操作都影响该对象的所有副本。但是,Xptr 不是一个 C 语言指针。虽然它指向 X,但并不包含 X 的地址。该函数修改 Xptr 的 Value 属性,但不修改底层对象 X 中的值。X 的原始值保持不变。

XX = 13.3000 从现有 lib.pointer 对象创建指针偏移打开实时脚本

此示例说明如何创建指向 MATLAB 向量 X 的子集的指针。仅当原始指针存在时,新指针才有效。

创建指向向量的指针。

X = 1:10; xp = libpointer('doublePtr',X); xp.Valueans = 1×10 1 2 3 4 5 6 7 8 9 10

使用 lib.pointer 加号运算符 (+) 创建指向 X 的最后六个元素的指针。

xp2 = xp + 4; xp2.Valueans = 1×6 5 6 7 8 9 10 多级指针

多级指针是指具有多级引用的参数。MATLAB 中的多级指针类型使用后缀 PtrPtr。例如,使用 doublePtrPtr 表示 C 参数 double **。

当调用接受多级指针参数的函数时,可以使用 lib.pointer 对象并让 MATLAB 将其转换为多级指针。

allocateStruct 和 deallocateStruct 函数

shrlibsample 库中的 allocateStruct 函数接受 c_structPtrPtr 参数。

EXPORTED_FUNCTION void allocateStruct(struct c_struct **val) { *val=(struct c_struct*) malloc(sizeof(struct c_struct)); (*val)->p1 = 12.4; (*val)->p2 = 222; (*val)->p3 = 333333; }

MATLAB 函数签名为:

返回类型名称参数c_structPtrPtrallocateStruct(c_structPtrPtr)voidPtr deallocateStruct(voidPtr)传递多级指针打开实时脚本

此示例说明如何将多级指针传递给 C 函数。

加载包含 allocateStruct 和 deallocateStruct 的库。

if not(libisloaded('shrlibsample')) addpath(fullfile(matlabroot,'extern','examples','shrlib')) loadlibrary('shrlibsample') end

创建 c_structPtr 指针。

sp = libpointer('c_structPtr');

调用 allocateStruct 以便为结构体分配内存。

res = calllib('shrlibsample','allocateStruct',sp)res = struct with fields: p1: 12.4000 p2: 222 p3: 333333

释放 allocateStruct 函数产生的内存。

calllib('shrlibsample','deallocateStruct',sp)返回字符串数组

假设您有一个库 myLib,其中有一个函数 acquireString,它读取一个字符串数组。函数签名为:

返回类型名称参数char**acquireString(void)char** acquireString(void)

以下伪代码说明如何操作返回值,即指向字符串的指针数组。

ptr = calllib(myLib,'acquireString')

MATLAB 创建 stringPtrPtr 类型的 lib.pointer 对象 ptr。此对象指向第一个字符串。要查看其他字符串,请递增指针。例如,要显示前三个字符串,请键入:

for index = 0:2 tempPtr = ptr + index; tempPtr.Value end ans = 'str1' ans = 'str2' ans = 'str3' 另请参阅

libpointer



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有